﻿using System;
using System.IO;
using System.Text;

namespace WSMX_Invoice
{
    public partial class Functions
    {
        /// <summary>
        /// Obtiene un stream apartir de una cadena de caracteres
        /// </summary>
        /// <param name="s">Cadena de caracteres</param>
        /// <returns>stream de memoria</returns>
        public static Stream String2Stream(string s)
        {
            if (String.IsNullOrEmpty(s))
                throw new ArgumentNullException(s);

            MemoryStream stream = new MemoryStream();
            StreamWriter writer = new StreamWriter(stream);
            writer.Write(s);
            writer.Flush();
            stream.Position = 0;
            return stream;
        }

        /// <summary>
        /// Obtiene un string apartir de un stream de memoria
        /// </summary>
        /// <param name="s">stream de memoria</param>
        /// <returns>cadena de caracteres</returns>
        public static string Stream2String(Stream s)
        {
            s.Position = 0;
            using (StreamReader reader = new StreamReader(s, Encoding.UTF8))
            {
                return reader.ReadToEnd();
            }
        }

        /// <summary>
        /// Obtiene un archivo en formato de 64 bits
        /// </summary>
        /// <param name="_filePath"></param>
        /// <returns></returns>
        public static string getFile64(string _filePath)
        {
            string ret;

            if (String.IsNullOrEmpty(_filePath))
                throw new ArgumentNullException(_filePath);

            FileStream fs = null;

            fs = File.OpenRead(_filePath);
            byte[] bytes = new byte[fs.Length];
            fs.Read(bytes, 0, Convert.ToInt32(fs.Length));

            ret = System.Convert.ToBase64String(bytes);

            return ret;
        }

        /// <summary>
        /// Lee un archivo y lo devuelve como cadena de caracteres
        /// </summary>
        /// <param name="_filePath">Ruta del archivo</param>
        /// <returns>Cadena de caracteres</returns>
        public static string readFile(string _filePath)
        {
            if (String.IsNullOrEmpty(_filePath))
                throw new ArgumentNullException(_filePath);

            StreamReader streamReader = new StreamReader(_filePath);
            return streamReader.ReadToEnd();
        }
        
        /// <summary>
        /// Escribe en un archivo el contenido de la cadena de carateres
        /// </summary>
        /// <param name="_filePath">Ruta del archivo</param>
        /// <param name="_content">string de contenido</param>
        /// <returns>True si no hubo errores</returns>
        public static Boolean writeFile(string _filePath, string _content)
        {
            Boolean ret = true;

            if (String.IsNullOrEmpty(_filePath))
                throw new ArgumentNullException(_filePath);

            if (String.IsNullOrEmpty(_content))
                throw new ArgumentNullException(_content);

            try
            {
                StreamWriter streamWriter = new StreamWriter(_filePath);
                streamWriter.Write(_content);
                streamWriter.Close();
            }
            catch
            {
                ret = false;
            }

            return ret;
        }
    }

    

    

}
